package template;

/**
 * 抽象模板角色
 */
public abstract class AbstactClass {

    /**
     * 抽象方法，子类需要实现
     */
    protected abstract void reader();

    /**
     * 具体方法，子类可覆盖
     */
    protected void writer(){
        System.out.println("create hive-writer");
    }

    /**
     * 抽象方法，子类需要实现
     */
    protected abstract void setting();

    /**
     * 抽象方法，子类需要实现
     */
    protected abstract void otherSetting();

    /**
     * 钩子方法，子类可实现
     *
     */
    protected boolean needOtherSettingHook(){
        return true;
    }

    /**
     * 模板方法，负责调度基本方法，子类不可实现
     */
    public final void create() {
        reader();
        writer();
        setting();
        if(needOtherSettingHook()){
            otherSetting();
        }
    }

}
